﻿Imports System.Data.SqlClient
Imports UTNComputers.clsOrden_Servicio
Imports UTNComputers.clsOrden_Servicio_Detalle
Imports UTNComputers.daoOrden_Servicio_Detalle
Imports UTNComputers.clsEstado_Os
Imports UTNComputers.daoEstado_Os
Imports UTNComputers.clsEmpleado
Imports UTNComputers.daoEmpleado
Imports UTNComputers.clsCliente
Imports UTNComputers.daoCliente
Imports UTNComputers.clsTipo_Os
Imports UTNComputers.daoTipo_Os
Public Class daoOrden_Servicio
    'Funcion para el alta de Orden de Servicio'
    Public Function Alta(ByVal Orden_Servicio As clsOrden_Servicio) As Boolean
        Dim Cn As New SqlConnection
        Dim Cm As New SqlCommand

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_ALTA_ORDEN_SERVICIO"

            Cm.Parameters.Add("@os_id", SqlDbType.Int)
            Cm.Parameters.Add("@tipo_os", SqlDbType.Int)
            Cm.Parameters.Add("@os_fecha_inicio", SqlDbType.SmallDateTime)
            Cm.Parameters.Add("@os_fecha_fin", SqlDbType.SmallDateTime)
            Cm.Parameters.Add("@tec_id", SqlDbType.Int)
            Cm.Parameters.Add("@cli_id", SqlDbType.Int)
            Cm.Parameters.Add("@os_estado", SqlDbType.Int)
            Cm.Parameters.Add("@os_importe", SqlDbType.Decimal)
            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)


            Cm.Parameters("@os_id").Value = Orden_Servicio.Os_Id
            Cm.Parameters("@tipo_os").Value = Orden_Servicio.Tipo_Os
            Cm.Parameters("@os_fecha_inicio").Value = Orden_Servicio.Os_Fecha_Inicio
            Cm.Parameters("@os_fecha_fin").Value = Orden_Servicio.Os_Fecha_Fin
            Cm.Parameters("@tec_id").Value = Orden_Servicio.Tec_Id
            Cm.Parameters("@cli_id").Value = Orden_Servicio.Cli_Id
            Cm.Parameters("@os_estado").Value = Orden_Servicio.Os_Estado
            Cm.Parameters("@os_importe").Value = Orden_Servicio.Os_Importe
            Cm.Parameters("@Cod_Suc").Value = Orden_Servicio.Cod_Suc


            Cm.Connection = Cn

            Cm.ExecuteNonQuery()
            Cn.Close()
            Return True

        Catch ex As Exception
            Return False
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    'Funcion para la modificacion una Orden de Servicio'
    Public Function Modificar(ByVal Orden_Servicio As clsOrden_Servicio) As Boolean
        Dim Cn As New SqlConnection
        Dim Cm As New SqlCommand

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_MODI_ORDEN_SERVICIO"

            Cm.Parameters.Add("@os_id", SqlDbType.Int)
            Cm.Parameters.Add("@tipo_os", SqlDbType.Int)
            Cm.Parameters.Add("@os_fecha_inicio", SqlDbType.SmallDateTime)
            Cm.Parameters.Add("@os_fecha_fin", SqlDbType.SmallDateTime)
            Cm.Parameters.Add("@tec_id", SqlDbType.Int)
            Cm.Parameters.Add("@cli_id", SqlDbType.Int)
            Cm.Parameters.Add("@os_estado", SqlDbType.Int)
            Cm.Parameters.Add("@os_importe", SqlDbType.Decimal)
            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)


            Cm.Parameters("@os_id").Value = Orden_Servicio.Os_Id
            Cm.Parameters("@tipo_os").Value = Orden_Servicio.Tipo_Os
            Cm.Parameters("@os_fecha_inicio").Value = Orden_Servicio.Os_Fecha_Inicio
            Cm.Parameters("@os_fecha_fin").Value = Orden_Servicio.Os_Fecha_Fin
            Cm.Parameters("@tec_id").Value = Orden_Servicio.Tec_Id
            Cm.Parameters("@cli_id").Value = Orden_Servicio.Cli_Id
            Cm.Parameters("@os_estado").Value = Orden_Servicio.Os_Estado
            Cm.Parameters("@os_importe").Value = Orden_Servicio.Os_Importe
            Cm.Parameters("@Cod_Suc").Value = Orden_Servicio.Cod_Suc

            Cm.Connection = Cn

            Cm.ExecuteNonQuery()
            Cn.Close()
            Return True

        Catch ex As Exception
            Return False
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    'Funcion para Traer una Orden de Servicio por ID'
    Public Function TraeOrdenServicio(ByVal os_id As Integer) As clsOrden_Servicio
        Dim Cn As New SqlClient.SqlConnection
        Dim Cm As New SqlClient.SqlCommand
        Dim Dr As SqlClient.SqlDataReader
        Dim Orden_Servicio As New clsOrden_Servicio()

        Dim Conf As New clsConfiguraciones()
        Dim dao_Conf As New daoConfiguraciones()
        Conf = dao_Conf.TraeConfiguraciones()

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_TRAER_ORDEN_SERVICIO"

            Cm.Parameters.Add("@os_id", SqlDbType.Int)
            Cm.Parameters("@os_id").Value = os_id
            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)
            Cm.Parameters("@Cod_Suc").Value = Conf.Cod_Suc

            Cm.Connection = Cn
            Dr = Cm.ExecuteReader
            If Dr.HasRows = True Then
                While Dr.Read
                    Orden_Servicio.Os_Id = Dr.GetInt32(0)
                    Orden_Servicio.Tipo_Os = Dr.GetInt32(1)
                    Orden_Servicio.Os_Fecha_Inicio = Dr.GetDateTime(2)

                    If Dr.IsDBNull(3) Then
                        Orden_Servicio.Os_Fecha_Fin = Convert.ToDateTime("01/01/1999")
                    Else
                        Orden_Servicio.Os_Fecha_Fin = Dr.GetDateTime(3)
                    End If

                    If Dr.IsDBNull(4) Then
                        Orden_Servicio.Tec_Id = 0
                    Else
                        Orden_Servicio.Tec_Id = Dr.GetInt32(4)
                    End If

                    If Dr.IsDBNull(5) Then
                        Orden_Servicio.Cli_Id = 0
                    Else
                        Orden_Servicio.Cli_Id = Dr.GetInt32(5)
                    End If

                    Orden_Servicio.Os_Estado = Dr.GetInt32(6)
                    Orden_Servicio.Os_Importe = Dr.GetDecimal(7)
                    Orden_Servicio.Cod_Suc = Dr.GetInt32(8)


                    Dim Estado_OsDao As New daoEstado_Os()
                    Orden_Servicio.Estado = Estado_OsDao.TraeEstadoOrdenServicio(Orden_Servicio.Os_Estado)
                    Estado_OsDao.Dispose()

                    Dim Tipo_OsDao As New daoTipo_Os()
                    Orden_Servicio.Tipo = Tipo_OsDao.TraeTipoOrdenServicio(Orden_Servicio.Tipo_Os)
                    Tipo_OsDao.Dispose()


                    If (Orden_Servicio.Tec_Id > 0) Then
                        Dim Empleado_Dao As New daoEmpleado()
                        Orden_Servicio.Empleado = Empleado_Dao.TraeEmpleado(Orden_Servicio.Tec_Id)
                        Empleado_Dao.Dispose()
                    Else
                        Orden_Servicio.Empleado = New clsEmpleado()
                    End If

                    If (Orden_Servicio.Cli_Id > 0) Then
                        Dim Cliente_Dao As New daoCliente()
                        Orden_Servicio.Cliente = Cliente_Dao.TraeCliente(Orden_Servicio.Cli_Id)
                        Cliente_Dao.Dispose()
                    Else
                        Orden_Servicio.Cliente = New clsCliente()
                    End If

                    Dim ListaDetalle_OS As New List(Of clsOrden_Servicio_Detalle)
                    Dim Detalle_OS_Dao As New daoOrden_Servicio_Detalle()
                    ListaDetalle_OS = Detalle_OS_Dao.TraeDetallesOrdenServicio(Orden_Servicio.Os_Id)
                    Orden_Servicio.Detalle = ListaDetalle_OS
                    Detalle_OS_Dao.Dispose()
                End While

                Dr.Close()
                Cn.Close()
            End If
            Return Orden_Servicio
        Catch ex As Exception
            Throw New Exception(ex.Message)
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    'Funcion para Traer Todas los Ordenes de Servicio por Rango de Fecha'
    Public Function TraeOrdenesServicio(ByVal fec_Desde As Date, ByVal fec_Hasta As Date) As List(Of clsOrden_Servicio)
        Dim Cn As New SqlClient.SqlConnection
        Dim Cm As New SqlClient.SqlCommand
        Dim Dr As SqlClient.SqlDataReader
        Dim ListaOrden_Servicio As New List(Of clsOrden_Servicio)

        Dim Conf As New clsConfiguraciones()
        Dim dao_Conf As New daoConfiguraciones()
        Conf = dao_Conf.TraeConfiguraciones()

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_TRAER_ORDEN_SERVICIO_X_FECHA"

            Cm.Parameters.Add("@fecha_desde", SqlDbType.SmallDateTime)
            Cm.Parameters.Add("@fecha_hasta", SqlDbType.SmallDateTime)
            Cm.Parameters("@fecha_desde").Value = fec_Desde
            Cm.Parameters("@fecha_hasta").Value = fec_Hasta
            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)
            Cm.Parameters("@Cod_Suc").Value = Conf.Cod_Suc

            Cm.Connection = Cn
            Dr = Cm.ExecuteReader
            If Dr.HasRows = True Then
                While Dr.Read
                    Dim Orden_Servicio As New clsOrden_Servicio()
                    Orden_Servicio.Os_Id = Dr.GetInt32(0)
                    Orden_Servicio.Tipo_Os = Dr.GetInt32(1)
                    Orden_Servicio.Os_Fecha_Inicio = Dr.GetDateTime(2)

                    If Dr.IsDBNull(3) Then
                        Orden_Servicio.Os_Fecha_Fin = Convert.ToDateTime("01/01/1999")
                    Else
                        Orden_Servicio.Os_Fecha_Fin = Dr.GetDateTime(3)
                    End If

                    If Dr.IsDBNull(4) Then
                        Orden_Servicio.Tec_Id = 0
                    Else
                        Orden_Servicio.Tec_Id = Dr.GetInt32(4)
                    End If

                    If Dr.IsDBNull(5) Then
                        Orden_Servicio.Cli_Id = 0
                    Else
                        Orden_Servicio.Cli_Id = Dr.GetInt32(5)
                    End If

                    Orden_Servicio.Os_Estado = Dr.GetInt32(6)
                    Orden_Servicio.Os_Importe = Dr.GetDecimal(7)
                    Orden_Servicio.Cod_Suc = Dr.GetInt32(8)

                    Dim Estado_OsDao As New daoEstado_Os()
                    Orden_Servicio.Estado = Estado_OsDao.TraeEstadoOrdenServicio(Orden_Servicio.Os_Estado)
                    Estado_OsDao.Dispose()

                    Dim Tipo_OsDao As New daoTipo_Os()
                    Orden_Servicio.Tipo = Tipo_OsDao.TraeTipoOrdenServicio(Orden_Servicio.Tipo_Os)
                    Tipo_OsDao.Dispose()


                    If (Orden_Servicio.Tec_Id > 0) Then
                        Dim Empleado_Dao As New daoEmpleado()
                        Orden_Servicio.Empleado = Empleado_Dao.TraeEmpleado(Orden_Servicio.Tec_Id)
                        Estado_OsDao.Dispose()
                    Else
                        Orden_Servicio.Empleado = New clsEmpleado()
                    End If

                    If (Orden_Servicio.Cli_Id > 0) Then
                        Dim Cliente_Dao As New daoCliente()
                        Orden_Servicio.Cliente = Cliente_Dao.TraeCliente(Orden_Servicio.Cli_Id)
                        Estado_OsDao.Dispose()
                    Else
                        Orden_Servicio.Cliente = New clsCliente()
                    End If

                    Dim ListaDetalle_OS As New List(Of clsOrden_Servicio_Detalle)
                    Dim Detalle_OS_Dao As New daoOrden_Servicio_Detalle()
                    ListaDetalle_OS = Detalle_OS_Dao.TraeDetallesOrdenServicio(Orden_Servicio.Os_Id)
                    Orden_Servicio.Detalle = ListaDetalle_OS
                    Detalle_OS_Dao.Dispose()

                    ListaOrden_Servicio.Add(Orden_Servicio)
                    Orden_Servicio.Dispose()
                End While

                Dr.Close()
                Cn.Close()
            End If
            Return ListaOrden_Servicio
        Catch ex As Exception
            Throw New Exception(ex.Message)
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    'Funcion para Traer Todas los Ordenes de Servicio pendientes por Rango de Fecha'
    Public Function TraeOrdenesServicioPend(ByVal fec_Desde As Date, ByVal fec_Hasta As Date) As List(Of clsOrden_Servicio)
        Dim Cn As New SqlClient.SqlConnection
        Dim Cm As New SqlClient.SqlCommand
        Dim Dr As SqlClient.SqlDataReader
        Dim ListaOrden_Servicio As New List(Of clsOrden_Servicio)

        Dim Conf As New clsConfiguraciones()
        Dim dao_Conf As New daoConfiguraciones()
        Conf = dao_Conf.TraeConfiguraciones()

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_TRAER_ORDEN_SERVICIO_PEND_X_FECHA"

            Cm.Parameters.Add("@fecha_desde", SqlDbType.SmallDateTime)
            Cm.Parameters.Add("@fecha_hasta", SqlDbType.SmallDateTime)
            Cm.Parameters("@fecha_desde").Value = fec_Desde
            Cm.Parameters("@fecha_hasta").Value = fec_Hasta
            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)
            Cm.Parameters("@Cod_Suc").Value = Conf.Cod_Suc

            Cm.Connection = Cn
            Dr = Cm.ExecuteReader
            If Dr.HasRows = True Then
                While Dr.Read
                    Dim Orden_Servicio As New clsOrden_Servicio()
                    Orden_Servicio.Os_Id = Dr.GetInt32(0)
                    Orden_Servicio.Tipo_Os = Dr.GetInt32(1)
                    Orden_Servicio.Os_Fecha_Inicio = Dr.GetDateTime(2)

                    If Dr.IsDBNull(3) Then
                        Orden_Servicio.Os_Fecha_Fin = Convert.ToDateTime("01/01/1999")
                    Else
                        Orden_Servicio.Os_Fecha_Fin = Dr.GetDateTime(3)
                    End If

                    If Dr.IsDBNull(4) Then
                        Orden_Servicio.Tec_Id = 0
                    Else
                        Orden_Servicio.Tec_Id = Dr.GetInt32(4)
                    End If

                    If Dr.IsDBNull(5) Then
                        Orden_Servicio.Cli_Id = 0
                    Else
                        Orden_Servicio.Cli_Id = Dr.GetInt32(5)
                    End If

                    Orden_Servicio.Os_Estado = Dr.GetInt32(6)
                    Orden_Servicio.Os_Importe = Dr.GetDecimal(7)
                    Orden_Servicio.Cod_Suc = Dr.GetInt32(8)

                    Dim Estado_OsDao As New daoEstado_Os()
                    Orden_Servicio.Estado = Estado_OsDao.TraeEstadoOrdenServicio(Orden_Servicio.Os_Estado)
                    Estado_OsDao.Dispose()

                    Dim Tipo_OsDao As New daoTipo_Os()
                    Orden_Servicio.Tipo = Tipo_OsDao.TraeTipoOrdenServicio(Orden_Servicio.Tipo_Os)
                    Tipo_OsDao.Dispose()


                    If (Orden_Servicio.Tec_Id > 0) Then
                        Dim Empleado_Dao As New daoEmpleado()
                        Orden_Servicio.Empleado = Empleado_Dao.TraeEmpleado(Orden_Servicio.Tec_Id)
                        Estado_OsDao.Dispose()
                    Else
                        Orden_Servicio.Empleado = New clsEmpleado()
                    End If

                    If (Orden_Servicio.Cli_Id > 0) Then
                        Dim Cliente_Dao As New daoCliente()
                        Orden_Servicio.Cliente = Cliente_Dao.TraeCliente(Orden_Servicio.Cli_Id)
                        Estado_OsDao.Dispose()
                    Else
                        Orden_Servicio.Cliente = New clsCliente()
                    End If

                    Dim ListaDetalle_OS As New List(Of clsOrden_Servicio_Detalle)
                    Dim Detalle_OS_Dao As New daoOrden_Servicio_Detalle()
                    ListaDetalle_OS = Detalle_OS_Dao.TraeDetallesOrdenServicio(Orden_Servicio.Os_Id)
                    Orden_Servicio.Detalle = ListaDetalle_OS
                    Detalle_OS_Dao.Dispose()

                    ListaOrden_Servicio.Add(Orden_Servicio)
                    Orden_Servicio.Dispose()
                End While

                Dr.Close()
                Cn.Close()
            End If
            Return ListaOrden_Servicio
        Catch ex As Exception
            Throw New Exception(ex.Message)
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    'Funcion para Traer Todas los Ordenes de Servicio pendientes por Rango de Fecha'
    Public Function TraeOrdenesServicioAsignable(ByVal fec_Desde As Date, ByVal fec_Hasta As Date) As List(Of clsOrden_Servicio)
        Dim Cn As New SqlClient.SqlConnection
        Dim Cm As New SqlClient.SqlCommand
        Dim Dr As SqlClient.SqlDataReader
        Dim ListaOrden_Servicio As New List(Of clsOrden_Servicio)

        Dim Conf As New clsConfiguraciones()
        Dim dao_Conf As New daoConfiguraciones()
        Conf = dao_Conf.TraeConfiguraciones()

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_TRAER_ORDEN_SERVICIO_ASIGNABLE_X_FECHA"

            Cm.Parameters.Add("@fecha_desde", SqlDbType.SmallDateTime)
            Cm.Parameters.Add("@fecha_hasta", SqlDbType.SmallDateTime)
            Cm.Parameters("@fecha_desde").Value = fec_Desde
            Cm.Parameters("@fecha_hasta").Value = fec_Hasta
            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)
            Cm.Parameters("@Cod_Suc").Value = Conf.Cod_Suc

            Cm.Connection = Cn
            Dr = Cm.ExecuteReader
            If Dr.HasRows = True Then
                While Dr.Read
                    Dim Orden_Servicio As New clsOrden_Servicio()
                    Orden_Servicio.Os_Id = Dr.GetInt32(0)
                    Orden_Servicio.Tipo_Os = Dr.GetInt32(1)
                    Orden_Servicio.Os_Fecha_Inicio = Dr.GetDateTime(2)

                    If Dr.IsDBNull(3) Then
                        Orden_Servicio.Os_Fecha_Fin = Convert.ToDateTime("01/01/1999")
                    Else
                        Orden_Servicio.Os_Fecha_Fin = Dr.GetDateTime(3)
                    End If

                    If Dr.IsDBNull(4) Then
                        Orden_Servicio.Tec_Id = 0
                    Else
                        Orden_Servicio.Tec_Id = Dr.GetInt32(4)
                    End If

                    If Dr.IsDBNull(5) Then
                        Orden_Servicio.Cli_Id = 0
                    Else
                        Orden_Servicio.Cli_Id = Dr.GetInt32(5)
                    End If

                    Orden_Servicio.Os_Estado = Dr.GetInt32(6)
                    Orden_Servicio.Os_Importe = Dr.GetDecimal(7)
                    Orden_Servicio.Cod_Suc = Dr.GetInt32(8)

                    Dim Estado_OsDao As New daoEstado_Os()
                    Orden_Servicio.Estado = Estado_OsDao.TraeEstadoOrdenServicio(Orden_Servicio.Os_Estado)
                    Estado_OsDao.Dispose()

                    Dim Tipo_OsDao As New daoTipo_Os()
                    Orden_Servicio.Tipo = Tipo_OsDao.TraeTipoOrdenServicio(Orden_Servicio.Tipo_Os)
                    Tipo_OsDao.Dispose()


                    If (Orden_Servicio.Tec_Id > 0) Then
                        Dim Empleado_Dao As New daoEmpleado()
                        Orden_Servicio.Empleado = Empleado_Dao.TraeEmpleado(Orden_Servicio.Tec_Id)
                        Estado_OsDao.Dispose()
                    Else
                        Orden_Servicio.Empleado = New clsEmpleado()
                    End If

                    If (Orden_Servicio.Cli_Id > 0) Then
                        Dim Cliente_Dao As New daoCliente()
                        Orden_Servicio.Cliente = Cliente_Dao.TraeCliente(Orden_Servicio.Cli_Id)
                        Estado_OsDao.Dispose()
                    Else
                        Orden_Servicio.Cliente = New clsCliente()
                    End If

                    Dim ListaDetalle_OS As New List(Of clsOrden_Servicio_Detalle)
                    Dim Detalle_OS_Dao As New daoOrden_Servicio_Detalle()
                    ListaDetalle_OS = Detalle_OS_Dao.TraeDetallesOrdenServicio(Orden_Servicio.Os_Id)
                    Orden_Servicio.Detalle = ListaDetalle_OS
                    Detalle_OS_Dao.Dispose()

                    ListaOrden_Servicio.Add(Orden_Servicio)
                    Orden_Servicio.Dispose()
                End While

                Dr.Close()
                Cn.Close()
            End If
            Return ListaOrden_Servicio
        Catch ex As Exception
            Throw New Exception(ex.Message)
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    Public Function TraeOrdenesServicioParaTecnico(ByVal fec_Desde As Date, ByVal fec_Hasta As Date) As List(Of clsOrden_Servicio)
        Dim Cn As New SqlClient.SqlConnection
        Dim Cm As New SqlClient.SqlCommand
        Dim Dr As SqlClient.SqlDataReader
        Dim ListaOrden_Servicio As New List(Of clsOrden_Servicio)

        Dim Conf As New clsConfiguraciones()
        Dim dao_Conf As New daoConfiguraciones()
        Conf = dao_Conf.TraeConfiguraciones()

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_TRAER_ORDEN_SERVICIO_PARA_TECNICO_X_FECHA"

            Cm.Parameters.Add("@fecha_desde", SqlDbType.SmallDateTime)
            Cm.Parameters.Add("@fecha_hasta", SqlDbType.SmallDateTime)
            Cm.Parameters("@fecha_desde").Value = fec_Desde
            Cm.Parameters("@fecha_hasta").Value = fec_Hasta
            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)
            Cm.Parameters("@Cod_Suc").Value = Conf.Cod_Suc

            Cm.Connection = Cn
            Dr = Cm.ExecuteReader
            If Dr.HasRows = True Then
                While Dr.Read
                    Dim Orden_Servicio As New clsOrden_Servicio()
                    Orden_Servicio.Os_Id = Dr.GetInt32(0)
                    Orden_Servicio.Tipo_Os = Dr.GetInt32(1)
                    Orden_Servicio.Os_Fecha_Inicio = Dr.GetDateTime(2)

                    If Dr.IsDBNull(3) Then
                        Orden_Servicio.Os_Fecha_Fin = Convert.ToDateTime("01/01/1999")
                    Else
                        Orden_Servicio.Os_Fecha_Fin = Dr.GetDateTime(3)
                    End If

                    If Dr.IsDBNull(4) Then
                        Orden_Servicio.Tec_Id = 0
                    Else
                        Orden_Servicio.Tec_Id = Dr.GetInt32(4)
                    End If

                    If Dr.IsDBNull(5) Then
                        Orden_Servicio.Cli_Id = 0
                    Else
                        Orden_Servicio.Cli_Id = Dr.GetInt32(5)
                    End If

                    Orden_Servicio.Os_Estado = Dr.GetInt32(6)
                    Orden_Servicio.Os_Importe = Dr.GetDecimal(7)
                    Orden_Servicio.Cod_Suc = Dr.GetInt32(8)

                    Dim Estado_OsDao As New daoEstado_Os()
                    Orden_Servicio.Estado = Estado_OsDao.TraeEstadoOrdenServicio(Orden_Servicio.Os_Estado)
                    Estado_OsDao.Dispose()

                    Dim Tipo_OsDao As New daoTipo_Os()
                    Orden_Servicio.Tipo = Tipo_OsDao.TraeTipoOrdenServicio(Orden_Servicio.Tipo_Os)
                    Tipo_OsDao.Dispose()


                    If (Orden_Servicio.Tec_Id > 0) Then
                        Dim Empleado_Dao As New daoEmpleado()
                        Orden_Servicio.Empleado = Empleado_Dao.TraeEmpleado(Orden_Servicio.Tec_Id)
                        Estado_OsDao.Dispose()
                    Else
                        Orden_Servicio.Empleado = New clsEmpleado()
                    End If

                    If (Orden_Servicio.Cli_Id > 0) Then
                        Dim Cliente_Dao As New daoCliente()
                        Orden_Servicio.Cliente = Cliente_Dao.TraeCliente(Orden_Servicio.Cli_Id)
                        Estado_OsDao.Dispose()
                    Else
                        Orden_Servicio.Cliente = New clsCliente()
                    End If

                    Dim ListaDetalle_OS As New List(Of clsOrden_Servicio_Detalle)
                    Dim Detalle_OS_Dao As New daoOrden_Servicio_Detalle()
                    ListaDetalle_OS = Detalle_OS_Dao.TraeDetallesOrdenServicio(Orden_Servicio.Os_Id)
                    Orden_Servicio.Detalle = ListaDetalle_OS
                    Detalle_OS_Dao.Dispose()

                    ListaOrden_Servicio.Add(Orden_Servicio)
                    Orden_Servicio.Dispose()
                End While

                Dr.Close()
                Cn.Close()
            End If
            Return ListaOrden_Servicio
        Catch ex As Exception
            Throw New Exception(ex.Message)
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    Public Function TraeOrdenesServicioParaVendedor(ByVal fec_Desde As Date, ByVal fec_Hasta As Date) As List(Of clsOrden_Servicio)
        Dim Cn As New SqlClient.SqlConnection
        Dim Cm As New SqlClient.SqlCommand
        Dim Dr As SqlClient.SqlDataReader
        Dim ListaOrden_Servicio As New List(Of clsOrden_Servicio)

        Dim Conf As New clsConfiguraciones()
        Dim dao_Conf As New daoConfiguraciones()
        Conf = dao_Conf.TraeConfiguraciones()

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_TRAER_ORDEN_SERVICIO_PARA_VENDEDOR_X_FECHA"

            Cm.Parameters.Add("@fecha_desde", SqlDbType.SmallDateTime)
            Cm.Parameters.Add("@fecha_hasta", SqlDbType.SmallDateTime)
            Cm.Parameters("@fecha_desde").Value = fec_Desde
            Cm.Parameters("@fecha_hasta").Value = fec_Hasta
            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)
            Cm.Parameters("@Cod_Suc").Value = Conf.Cod_Suc

            Cm.Connection = Cn
            Dr = Cm.ExecuteReader
            If Dr.HasRows = True Then
                While Dr.Read
                    Dim Orden_Servicio As New clsOrden_Servicio()
                    Orden_Servicio.Os_Id = Dr.GetInt32(0)
                    Orden_Servicio.Tipo_Os = Dr.GetInt32(1)
                    Orden_Servicio.Os_Fecha_Inicio = Dr.GetDateTime(2)

                    If Dr.IsDBNull(3) Then
                        Orden_Servicio.Os_Fecha_Fin = Convert.ToDateTime("01/01/1999")
                    Else
                        Orden_Servicio.Os_Fecha_Fin = Dr.GetDateTime(3)
                    End If

                    If Dr.IsDBNull(4) Then
                        Orden_Servicio.Tec_Id = 0
                    Else
                        Orden_Servicio.Tec_Id = Dr.GetInt32(4)
                    End If

                    If Dr.IsDBNull(5) Then
                        Orden_Servicio.Cli_Id = 0
                    Else
                        Orden_Servicio.Cli_Id = Dr.GetInt32(5)
                    End If

                    Orden_Servicio.Os_Estado = Dr.GetInt32(6)
                    Orden_Servicio.Os_Importe = Dr.GetDecimal(7)
                    Orden_Servicio.Cod_Suc = Dr.GetInt32(8)

                    Dim Estado_OsDao As New daoEstado_Os()
                    Orden_Servicio.Estado = Estado_OsDao.TraeEstadoOrdenServicio(Orden_Servicio.Os_Estado)
                    Estado_OsDao.Dispose()

                    Dim Tipo_OsDao As New daoTipo_Os()
                    Orden_Servicio.Tipo = Tipo_OsDao.TraeTipoOrdenServicio(Orden_Servicio.Tipo_Os)
                    Tipo_OsDao.Dispose()


                    If (Orden_Servicio.Tec_Id > 0) Then
                        Dim Empleado_Dao As New daoEmpleado()
                        Orden_Servicio.Empleado = Empleado_Dao.TraeEmpleado(Orden_Servicio.Tec_Id)
                        Estado_OsDao.Dispose()
                    Else
                        Orden_Servicio.Empleado = New clsEmpleado()
                    End If

                    If (Orden_Servicio.Cli_Id > 0) Then
                        Dim Cliente_Dao As New daoCliente()
                        Orden_Servicio.Cliente = Cliente_Dao.TraeCliente(Orden_Servicio.Cli_Id)
                        Estado_OsDao.Dispose()
                    Else
                        Orden_Servicio.Cliente = New clsCliente()
                    End If

                    Dim ListaDetalle_OS As New List(Of clsOrden_Servicio_Detalle)
                    Dim Detalle_OS_Dao As New daoOrden_Servicio_Detalle()
                    ListaDetalle_OS = Detalle_OS_Dao.TraeDetallesOrdenServicio(Orden_Servicio.Os_Id)
                    Orden_Servicio.Detalle = ListaDetalle_OS
                    Detalle_OS_Dao.Dispose()

                    ListaOrden_Servicio.Add(Orden_Servicio)
                    Orden_Servicio.Dispose()
                End While

                Dr.Close()
                Cn.Close()
            End If
            Return ListaOrden_Servicio
        Catch ex As Exception
            Throw New Exception(ex.Message)
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    'Funcion para Traer Todas los Ordenes de Servicio por Cliente'
    Public Function TraeOrdenesServicio(ByVal Cliente As clsCliente) As List(Of clsOrden_Servicio)
        Dim Cn As New SqlClient.SqlConnection
        Dim Cm As New SqlClient.SqlCommand
        Dim Dr As SqlClient.SqlDataReader
        Dim ListaOrden_Servicio As New List(Of clsOrden_Servicio)

        Dim Conf As New clsConfiguraciones()
        Dim dao_Conf As New daoConfiguraciones()
        Conf = dao_Conf.TraeConfiguraciones()

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_TRAER_ORDEN_SERVICIO_X_CLIENTE"

            Cm.Parameters.Add("@cli_id", SqlDbType.Int)
            Cm.Parameters("@cli_id").Value = Cliente.Cli_Id
            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)
            Cm.Parameters("@Cod_Suc").Value = Conf.Cod_Suc

            Cm.Connection = Cn
            Dr = Cm.ExecuteReader
            If Dr.HasRows = True Then
                While Dr.Read
                    Dim Orden_Servicio As New clsOrden_Servicio()
                    Orden_Servicio.Os_Id = Dr.GetInt32(0)
                    Orden_Servicio.Tipo_Os = Dr.GetInt32(1)
                    Orden_Servicio.Os_Fecha_Inicio = Dr.GetDateTime(2)

                    If Dr.IsDBNull(3) Then
                        Orden_Servicio.Os_Fecha_Fin = Convert.ToDateTime("01/01/1999")
                    Else
                        Orden_Servicio.Os_Fecha_Fin = Dr.GetDateTime(3)
                    End If

                    If Dr.IsDBNull(4) Then
                        Orden_Servicio.Tec_Id = 0
                    Else
                        Orden_Servicio.Tec_Id = Dr.GetInt32(4)
                    End If

                    If Dr.IsDBNull(5) Then
                        Orden_Servicio.Cli_Id = 0
                    Else
                        Orden_Servicio.Cli_Id = Dr.GetInt32(5)
                    End If

                    Orden_Servicio.Os_Estado = Dr.GetInt32(6)
                    Orden_Servicio.Os_Importe = Dr.GetDecimal(7)
                    Orden_Servicio.Cod_Suc = Dr.GetInt32(8)

                    Dim Estado_OsDao As New daoEstado_Os()
                    Orden_Servicio.Estado = Estado_OsDao.TraeEstadoOrdenServicio(Orden_Servicio.Os_Estado)
                    Estado_OsDao.Dispose()

                    Dim Tipo_OsDao As New daoTipo_Os()
                    Orden_Servicio.Tipo = Tipo_OsDao.TraeTipoOrdenServicio(Orden_Servicio.Tipo_Os)
                    Tipo_OsDao.Dispose()

                    If (Orden_Servicio.Tec_Id > 0) Then
                        Dim Empleado_Dao As New daoEmpleado()
                        Orden_Servicio.Empleado = Empleado_Dao.TraeEmpleado(Orden_Servicio.Tec_Id)
                        Estado_OsDao.Dispose()
                    Else
                        Orden_Servicio.Empleado = New clsEmpleado()
                    End If

                    If (Orden_Servicio.Cli_Id > 0) Then
                        Dim Cliente_Dao As New daoCliente()
                        Orden_Servicio.Cliente = Cliente_Dao.TraeCliente(Orden_Servicio.Cli_Id)
                        Estado_OsDao.Dispose()
                    Else
                        Orden_Servicio.Cliente = New clsCliente()
                    End If

                    Dim ListaDetalle_OS As New List(Of clsOrden_Servicio_Detalle)
                    Dim Detalle_OS_Dao As New daoOrden_Servicio_Detalle()
                    ListaDetalle_OS = Detalle_OS_Dao.TraeDetallesOrdenServicio(Orden_Servicio.Os_Id)
                    Orden_Servicio.Detalle = ListaDetalle_OS
                    Detalle_OS_Dao.Dispose()

                    ListaOrden_Servicio.Add(Orden_Servicio)
                    Orden_Servicio.Dispose()
                End While

                Dr.Close()
                Cn.Close()
            End If
            Return ListaOrden_Servicio
        Catch ex As Exception
            Throw New Exception(ex.Message)
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    'Funcion para Traer Todas los Ordenes de Servicio por Empleado'
    Public Function TraeOrdenesServicio(ByVal Empleado As clsEmpleado) As List(Of clsOrden_Servicio)
        Dim Cn As New SqlClient.SqlConnection
        Dim Cm As New SqlClient.SqlCommand
        Dim Dr As SqlClient.SqlDataReader
        Dim ListaOrden_Servicio As New List(Of clsOrden_Servicio)

        Dim Conf As New clsConfiguraciones()
        Dim dao_Conf As New daoConfiguraciones()
        Conf = dao_Conf.TraeConfiguraciones()

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_TRAER_ORDEN_SERVICIO_X_EMPLEADO"

            Cm.Parameters.Add("@tec_id", SqlDbType.Int)
            Cm.Parameters("@tec_id").Value = Empleado.Emp_Id
            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)
            Cm.Parameters("@Cod_Suc").Value = Conf.Cod_Suc

            Cm.Connection = Cn
            Dr = Cm.ExecuteReader
            If Dr.HasRows = True Then
                While Dr.Read
                    Dim Orden_Servicio As New clsOrden_Servicio()
                    Orden_Servicio.Os_Id = Dr.GetInt32(0)
                    Orden_Servicio.Tipo_Os = Dr.GetInt32(1)
                    Orden_Servicio.Os_Fecha_Inicio = Dr.GetDateTime(2)

                    If Dr.IsDBNull(3) Then
                        Orden_Servicio.Os_Fecha_Fin = Convert.ToDateTime("01/01/1999")
                    Else
                        Orden_Servicio.Os_Fecha_Fin = Dr.GetDateTime(3)
                    End If

                    If Dr.IsDBNull(4) Then
                        Orden_Servicio.Tec_Id = 0
                    Else
                        Orden_Servicio.Tec_Id = Dr.GetInt32(4)
                    End If

                    If Dr.IsDBNull(5) Then
                        Orden_Servicio.Cli_Id = 0
                    Else
                        Orden_Servicio.Cli_Id = Dr.GetInt32(5)
                    End If

                    Orden_Servicio.Os_Estado = Dr.GetInt32(6)
                    Orden_Servicio.Os_Importe = Dr.GetDecimal(7)
                    Orden_Servicio.Cod_Suc = Dr.GetInt32(8)

                    Dim Estado_OsDao As New daoEstado_Os()
                    Orden_Servicio.Estado = Estado_OsDao.TraeEstadoOrdenServicio(Orden_Servicio.Os_Estado)
                    Estado_OsDao.Dispose()

                    Dim Tipo_OsDao As New daoTipo_Os()
                    Orden_Servicio.Tipo = Tipo_OsDao.TraeTipoOrdenServicio(Orden_Servicio.Tipo_Os)
                    Tipo_OsDao.Dispose()

                    If (Orden_Servicio.Tec_Id > 0) Then
                        Dim Empleado_Dao As New daoEmpleado()
                        Orden_Servicio.Empleado = Empleado_Dao.TraeEmpleado(Orden_Servicio.Tec_Id)
                        Estado_OsDao.Dispose()
                    Else
                        Orden_Servicio.Empleado = New clsEmpleado()
                    End If

                    If (Orden_Servicio.Cli_Id > 0) Then
                        Dim Cliente_Dao As New daoCliente()
                        Orden_Servicio.Cliente = Cliente_Dao.TraeCliente(Orden_Servicio.Cli_Id)
                        Estado_OsDao.Dispose()
                    Else
                        Orden_Servicio.Cliente = New clsCliente()
                    End If

                    Dim ListaDetalle_OS As New List(Of clsOrden_Servicio_Detalle)
                    Dim Detalle_OS_Dao As New daoOrden_Servicio_Detalle()
                    ListaDetalle_OS = Detalle_OS_Dao.TraeDetallesOrdenServicio(Orden_Servicio.Os_Id)
                    Orden_Servicio.Detalle = ListaDetalle_OS
                    Detalle_OS_Dao.Dispose()

                    ListaOrden_Servicio.Add(Orden_Servicio)
                    Orden_Servicio.Dispose()
                End While

                Dr.Close()
                Cn.Close()
            End If
            Return ListaOrden_Servicio
        Catch ex As Exception
            Throw New Exception(ex.Message)
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    'Funcion para Traer Todas los Ordenes de Servicio por Estado'
    Public Function TraeOrdenesServicio(ByVal Estado As clsEstado_Os) As List(Of clsOrden_Servicio)
        Dim Cn As New SqlClient.SqlConnection
        Dim Cm As New SqlClient.SqlCommand
        Dim Dr As SqlClient.SqlDataReader
        Dim ListaOrden_Servicio As New List(Of clsOrden_Servicio)

        Dim Conf As New clsConfiguraciones()
        Dim dao_Conf As New daoConfiguraciones()
        Conf = dao_Conf.TraeConfiguraciones()

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_TRAER_ORDEN_SERVICIO_X_ESTADO"

            Cm.Parameters.Add("@os_estado", SqlDbType.Int)
            Cm.Parameters("@os_estado").Value = Estado.EstadoOs_Id
            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)
            Cm.Parameters("@Cod_Suc").Value = Conf.Cod_Suc

            Cm.Connection = Cn
            Dr = Cm.ExecuteReader
            If Dr.HasRows = True Then
                While Dr.Read
                    Dim Orden_Servicio As New clsOrden_Servicio()
                    Orden_Servicio.Os_Id = Dr.GetInt32(0)
                    Orden_Servicio.Tipo_Os = Dr.GetInt32(1)
                    Orden_Servicio.Os_Fecha_Inicio = Dr.GetDateTime(2)

                    If Dr.IsDBNull(3) Then
                        Orden_Servicio.Os_Fecha_Fin = Convert.ToDateTime("01/01/1999")
                    Else
                        Orden_Servicio.Os_Fecha_Fin = Dr.GetDateTime(3)
                    End If

                    If Dr.IsDBNull(4) Then
                        Orden_Servicio.Tec_Id = 0
                    Else
                        Orden_Servicio.Tec_Id = Dr.GetInt32(4)
                    End If

                    If Dr.IsDBNull(5) Then
                        Orden_Servicio.Cli_Id = 0
                    Else
                        Orden_Servicio.Cli_Id = Dr.GetInt32(5)
                    End If

                    Orden_Servicio.Os_Estado = Dr.GetInt32(6)
                    Orden_Servicio.Os_Importe = Dr.GetDecimal(7)
                    Orden_Servicio.Cod_Suc = Dr.GetInt32(8)

                    Dim Estado_OsDao As New daoEstado_Os()
                    Orden_Servicio.Estado = Estado_OsDao.TraeEstadoOrdenServicio(Orden_Servicio.Os_Estado)
                    Estado_OsDao.Dispose()

                    Dim Tipo_OsDao As New daoTipo_Os()
                    Orden_Servicio.Tipo = Tipo_OsDao.TraeTipoOrdenServicio(Orden_Servicio.Tipo_Os)
                    Tipo_OsDao.Dispose()

                    If (Orden_Servicio.Tec_Id > 0) Then
                        Dim Empleado_Dao As New daoEmpleado()
                        Orden_Servicio.Empleado = Empleado_Dao.TraeEmpleado(Orden_Servicio.Tec_Id)
                        Estado_OsDao.Dispose()
                    Else
                        Orden_Servicio.Empleado = New clsEmpleado()
                    End If

                    If (Orden_Servicio.Cli_Id > 0) Then
                        Dim Cliente_Dao As New daoCliente()
                        Orden_Servicio.Cliente = Cliente_Dao.TraeCliente(Orden_Servicio.Cli_Id)
                        Estado_OsDao.Dispose()
                    Else
                        Orden_Servicio.Cliente = New clsCliente()
                    End If

                    Dim ListaDetalle_OS As New List(Of clsOrden_Servicio_Detalle)
                    Dim Detalle_OS_Dao As New daoOrden_Servicio_Detalle()
                    ListaDetalle_OS = Detalle_OS_Dao.TraeDetallesOrdenServicio(Orden_Servicio.Os_Id)
                    Orden_Servicio.Detalle = ListaDetalle_OS
                    Detalle_OS_Dao.Dispose()

                    ListaOrden_Servicio.Add(Orden_Servicio)
                    Orden_Servicio.Dispose()
                End While

                Dr.Close()
                Cn.Close()
            End If
            Return ListaOrden_Servicio
        Catch ex As Exception
            Throw New Exception(ex.Message)
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    '---------------------------------------------------------------------
    ' Constructor de la Clase
    '---------------------------------------------------------------------
    Public Sub New()

        MyBase.New()

    End Sub

    '---------------------------------------------------------------------
    ' Destructor de la Clase
    '---------------------------------------------------------------------
    Public Sub Dispose()

        MyBase.Finalize()

    End Sub

End Class
